package com.yiwenup.leetcode.offer;

/**
 * https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de-ge-shu-lcof/
 **/
public class No015 {
    /**
     * 执行用时：1 ms, 在所有 Java 提交中击败了93.92%的用户
     * 内存消耗：35.3 MB, 在所有 Java 提交中击败了69.58%的用户
     */
    public int hammingWeight(int n) {
        String s = Integer.toBinaryString(n);
        int count = 0;
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (c == '1') {
                count++;
            }
        }

        return count;
    }

    /**
     * 执行用时：0 ms, 在所有 Java 提交中击败了100.00%的用户
     * 内存消耗：35.1 MB, 在所有 Java 提交中击败了91.22%的用户
     */
    public int hammingWeight1(int n) {
        return Integer.bitCount(n);
    }

    /**
     * 执行用时：1 ms, 在所有 Java 提交中击败了93.92%的用户
     * 内存消耗：35.2 MB, 在所有 Java 提交中击败了84.56%的用户
     */
    public int hammingWeight2(int n) {
        int count = 0;
        while (n != 0) {
            n &= (n - 1);
            count++;
        }
        return count;
    }

    /**
     * 执行用时：0 ms, 在所有 Java 提交中击败了100.00%的用户
     * 内存消耗：35.1 MB, 在所有 Java 提交中击败了92.78%的用户
     */
    public int hammingWeight3(int n) {
        int count = 0;
        for (int i = 0; i < 32; i++) {
            if ((n & (1 << i)) != 0) {
                System.out.println(n & (1 << i));
                count++;
            }
        }
        return count;
    }
}
